递增/递减操作符: ++、--
可以作用于任何值(不限于整数),使用时遵循以下规则:
let s1 = "2";
let s2 = "z";
let b = false;
let f = 1.1;
let o = {
valueOf() {
return -1;
}
};
s1++; // 值变成数值3
s2++; // 值变成NaN
b++; // 值变成数值 1
f--; // 值变成 0.10000000000000009(因为浮点数不精确)
o--; // 值变成-2
一元加和减:+、-
如果符号放在数值类型的变量前面,则表示正、负,如果放在其他类型的变量前面,则按照上述规则进行类型转换
位操作符:与 &、或 |、非 ~、异或 ^、左移 <<、有符号右移 >>、无符号右移 >>>(略过,感兴趣自己看书上原文)
布尔操作符:逻辑非 !、逻辑与 &&、逻辑或 ||
逻辑非应用于任何数据类型,遵循以下规则:
逻辑非操作符也可以用于把任意值转换为布尔值,方法是同时使用两个叹号(!!),相当于调用了转型函数 Boolean()
逻辑与应用于任何数据类型,如果有操作数不是布尔值,则逻辑与并不 一定会返回布尔值,而是遵循如下规则:
与逻辑与类似,如果有一个操作数不是布尔值,那么逻辑或操作符也不一定返回布尔值。它遵循如下规则:
乘性操作符:乘 *、除 /、取模 %
乘法操作符在处理特殊值时也有一些特殊行为:
除法操作符与乘法类似,也有一些特殊行为:
与其他乘性操作符一样,取模操作符对特殊值也有一些特殊的行为:
指数操作符:**
// 平方
console.log(Math.pow(3, 2); // 9
console.log(3 ** 2); // 9
// 开平方
console.log(Math.pow(16, 0.5); // 4
console.log(16 ** 0.5); // 4
// 也可用赋值操作符实现
let squared = 3;
squared **= 2;
console.log(squared); // 9
let sqrt = 16;
sqrt **= 0.5;
console.log(sqrt); // 4
加性操作符:加 +、减 -
加法操作符执行加法运算并根据如下规则返回结果:
let result1 = 5 + 5;
console.log(result1); // 10
let result2 = 5 + "5";
console.log(result2); // "55"
let num1 = 5;
let num2 = 10;
let message = "The sum of 5 and 10 is " + num1 + num2;
console.log(message); // "The sum of 5 and 10 is 510"
减法操作符与加法类似,也有一组规则用于处理特殊结果:
let result1 = 5 - true; // true被转换为1,所以结果是4
let result2 = NaN - 1; // NaN
let result3 = 5 - 3; // 2
let result4 = 5 - ""; // ""被转换为0,所以结果是5
let result5 = 5 - "2"; // "2"被转换为2,所以结果是3
let result6 = 5 - null; // null被转换为0,所以结果是5
关系操作符:大于 >、大于等于 >=、小于 <、小于等于 <=
用法跟数学里用法一样,这里只记录对于特殊数据类型的比较规则:
如果操作数都是字符串,则逐个比较字符串中对应字符的编码
let result1 = "Brick" < "alphabet"; // true
let result2 = "Brick".toLowerCase() < "alphabet".toLowerCase(); // false
如果有任一操作数是数值,则将另一个操作数转换为数值,执行数值比较
let result = "23" < 3; // false
如果有任一操作数是对象,则调用其 valueOf() 方法,取得结果后再根据前面的规则执行比较。如果没有 valueOf() 操作符,则调用 toString() 方法,取得结果后再根据前面的规则执行比较
如果有任一操作数是布尔值,则将其转换为数值再执行比较
任何关系操作符在涉及比较 NaN 时都返回 false
let result1 = "a" < 3; // 因为"a"会转换为NaN,所以结果是false
let result2 = NaN < 3; // false
let result3 = NaN >= 3; // false
相等操作符:等于==、不等于!=、全等===、不全等!==
全等操作符与相等操作符类似,但是不转换操作数,不全等与之类似
let result1 = ("55" == 55); // true,转换后相等
let result2 = ("55" === 55); // false,数据类型不同
let result3 = (null == undefined); // true
let result4 = (null === undefined); // false
条件操作符:variable = boolean_expression ? true_value : false_value;
let max = (num1 > num2) ? num1 : num2;
赋值操作符
逗号操作符
可以用来在一条语句中执行多个操作
let num1 = 1, num2 = 2, num3 = 3;
在赋值时使用逗号操作符分隔值,最终会返回表达式中最后一个值
let num = (5, 1, 4, 8, 0); // num的值为0